/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package com.architexa.org.eclipse.gef.handles;

import com.architexa.org.eclipse.draw2d.AbstractBorder;
import com.architexa.org.eclipse.draw2d.Border;
import com.architexa.org.eclipse.draw2d.ColorConstants;
import com.architexa.org.eclipse.draw2d.Graphics;
import com.architexa.org.eclipse.draw2d.IFigure;
import com.architexa.org.eclipse.draw2d.geometry.Insets;
import com.architexa.org.eclipse.draw2d.geometry.Point;
import com.architexa.org.eclipse.draw2d.geometry.PointList;
import com.architexa.org.eclipse.draw2d.geometry.Rectangle;

import org.eclipse.swt.graphics.Color;


/**
 * A {@link Border} with a triangle in each corner.
 * @deprecated this class is no longer used
 */
public final class CornerTriangleBorder
	extends AbstractBorder
{

private boolean isPrimary = true;

/**
 * Creates a new <code>CornerTriangleBorder</code>.
 *
 * @param isPrimary Determines this border's color.
 */
public CornerTriangleBorder(boolean isPrimary) {
	super();
	this.isPrimary = isPrimary;
}

/**
 * Returns <code>true</code>.
 * @see com.architexa.org.eclipse.draw2d.Border#isOpaque()
 */
public boolean isOpaque() {
	return true;
}

/**
 * @see com.architexa.org.eclipse.draw2d.Border#getInsets(com.architexa.org.eclipse.draw2d.IFigure)
 */
public Insets getInsets(IFigure figure) {
	return new Insets(1);
}

/**
 * Paints the border.  If this is a border for the primary selection, it's painted black. 
 * Otherwise, it's painted white.
 * 
 * @param figure   The <code>IFigure</code> this border will be painted on
 * @param graphics The <code>Graphics</code>.
 * @param insets   The <code>Insets</code>.
 */
public void paint(IFigure figure, Graphics graphics, Insets insets) {
	// Don't paint the center of the figure.
	int width = 1, edgeSize;
	Rectangle rect = tempRect;
	tempRect.setBounds(getPaintRectangle(figure, insets));
	rect.width--;
	rect.height--;
	rect.shrink(width / 2, width / 2);
	graphics.setLineWidth(width);
	
	//Draw the primary handles one pixel larger than the secondary
	//handles.  Primary which paints as black with white border looks
	//smaller than secondary which paints as white with black border.
	edgeSize = isPrimary() ? 7 : 6;
	
	//Top left corner
	PointList pList = new PointList();
	pList.addPoint(rect.getTopLeft());
	pList.addPoint(new Point(rect.x, rect.y + edgeSize));
	pList.addPoint(new Point(rect.x + edgeSize, rect.y));
	
	graphics.setBackgroundColor(getFillColor());
	graphics.fillPolygon(pList);
	graphics.setForegroundColor(getBorderColor()); 
	graphics.drawPolygon(pList);

	//Bottom left corner
	pList = new PointList();
	pList.addPoint(rect.getBottomLeft());
	pList.addPoint(new Point((rect.x + edgeSize), (rect.y + rect.height)));
	pList.addPoint(new Point(rect.x, (rect.y + rect.height - edgeSize)));
	
	graphics.setBackgroundColor(getFillColor());
	graphics.fillPolygon(pList);
	graphics.setForegroundColor(getBorderColor()); 
	graphics.drawPolygon(pList);

	//Top right corner
	pList = new PointList();
	pList.addPoint(rect.getTopRight());
	pList.addPoint(new Point(((rect.x + rect.width) - edgeSize), rect.y));
	pList.addPoint(new Point((rect.x + rect.width), (rect.y + edgeSize)));
	
	graphics.setBackgroundColor(getFillColor());
	graphics.fillPolygon(pList);
	graphics.setForegroundColor(getBorderColor()); 
	graphics.drawPolygon(pList);

	//Bottom right corner
	pList = new PointList();
	pList.addPoint(rect.getBottomRight());
	pList.addPoint(new Point(((rect.x + rect.width) - edgeSize), (rect.y + rect.height)));
	pList.addPoint(new Point((rect.x + rect.width), (rect.y + rect.height - edgeSize)));
	
	graphics.setBackgroundColor(getFillColor());
	graphics.fillPolygon(pList);
	graphics.setForegroundColor(getBorderColor()); 
	graphics.drawPolygon(pList);
}

/**
 * Returns the outline color based on what is returned
 * by {@link #isPrimary()}.
 *
 * @return The outline color.
 */
protected Color getBorderColor() {
	return (isPrimary())
		? ColorConstants.white
		: ColorConstants.black;
}

/**
 * Returns the fill color based on what is returned
 * by {@link #isPrimary()}.
 *
 * @return The fill color.
 */
protected Color getFillColor() {
	return (isPrimary())
		? ColorConstants.black
		: ColorConstants.white;
}

/**
 * Returns <code>true</code> if this border is for the 
 * primary object in the selection. Otherwise, returns
 * <code>false</code>.
 *
 * @return Whether or not this is a primary border.
 */
public boolean isPrimary() {
	return isPrimary;
}

/**
 * Sets this border as primary if <code>isPrimary</code>
 * is <code>true</code>.
 *
 * @param isPrimary True if this border is for the primary object in the selection.
 */
public void setPrimary(boolean isPrimary) {
	this.isPrimary = isPrimary;
}

}
